package utils

import (
	"errors"
)

func ContainsString(arr []string, str string) bool {
	for _, s := range arr {
		if s == str {
			return true
		}
	}
	return false
}

func InIntArray(need int, needArr []int) bool {
	for _, v := range needArr {
		if need == v {
			return true
		}
	}
	return false
}

// DelStringInFront 删除指定字符串的前面字符串
func DelStringInFront(s string, strs []string) ([]string, error) {

	// 查找目标字符串在数组中的位置
	index := -1
	for i, str := range strs {
		if str == s {
			index = i
			break
		}
	}

	if index == -1 {
		err := errors.New("指定字符串不在字符串数组中")
		return nil, err
	} else {
		// 删除目标字符串前面的所有元素
		strs = strs[index:]
	}
	return strs, nil
}

// To2DArray 一维数组转二维数组
func To2DArray[T any](original []T, chunkSize int) [][]T {
	var array2D [][]T
	for i := 0; i < len(original); i += chunkSize {
		end := i + chunkSize

		if end > len(original) {
			end = len(original)
		}
		array2D = append(array2D, original[i:end])
	}
	return array2D
}

// DivideInt 将num进行part等分，多余部分均摊到前面
func DivideInt(num int, part int) []int {
	if num <= 0 {
		return nil
	}
	if num <= part {
		parts := make([]int, num)
		for i := 0; i < num; i++ {
			parts[i] = 1
		}
		return parts
	}

	// 创建一个长度为10的切片来存储每份的结果
	parts := make([]int, part)
	// 计算每份的基准值（整除部分）
	base := num / part
	// 计算余数
	remainder := num % part
	// 分配基准值给每份
	for i := 0; i < part; i++ {
		parts[i] = base
		// 如果还有余数且当前份还没被增加（为了平均分配余数）
		if remainder > 0 {
			parts[i]++
			remainder--

			// 确保每个余数只被使用一次
			if remainder == 0 {
				continue
			}
		}
	}
	return parts
}
